package com.yungu.swift.system.sys.service;

import com.yungu.swift.base.ResponseData;
import com.yungu.swift.base.model.PageVo;
import com.yungu.swift.base.service.BaseService;
import com.yungu.swift.system.sys.model.dto.SysPointSiteDto;
import com.yungu.swift.system.sys.model.dto.SysWayDto;
import com.yungu.swift.system.sys.model.param.AdminRouteParam;
import com.yungu.swift.system.sys.model.param.AdminWayPageParam;
import com.yungu.swift.system.sys.model.param.AdminWayParcelParam;
import com.yungu.swift.system.sys.model.vo.ScanCodeWayInfoVo;
import com.yungu.swift.system.sys.model.vo.SimpleWayInfo;
import com.yungu.swift.system.sys.model.vo.SysWayInfoVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


/**
 * SystemWayService
 **/

public interface SysWayService extends BaseService<SysWayDto> {
    /**
     * 获取用户路线信息
     *
     * @return List<SysWayDto>
     */
    ResponseData<List<SysWayDto>> findWithOriginDest(Map<String, Object> paramMap);

    /**
     * 获取线路明细
     *
     * @return List<SysWayDto>
     */
    ResponseData<List<SysWayDto>> findWayInfoDetail(Map<String, Object> paramMap);

    /**
     * 获取路线管理分页数据
     *
     * @param wayPageParam
     * @return
     */
    ResponseData<PageVo<SysWayDto>> findWithOriginDestByPage(AdminWayPageParam wayPageParam);

    /**
     * 获取拼车线路起点
     *
     * @param appid
     * @param pasLng       经度
     * @param pasLat       纬度
     * @param onlyMatch
     * @param businessType 业务类型
     * @param orderDemand  机场专线
     * @param transferType 接送机
     * @return
     */
    ResponseData<List<SysPointSiteDto>> waysOriginByPoint(String appid, Double pasLng, Double pasLat, Integer onlyMatch, Integer businessType, Integer orderDemand, Integer transferType);

    /**
     * 获取拼车线路终点
     *
     * @param appid
     * @param originUuid  起点 uuid
     * @param orderDemand 机场专线
     * @return
     */
    ResponseData<List<SysPointSiteDto>> waysDestByOrigin(String appid, String originUuid, Integer orderDemand);

    /**
     * 新增或更新
     *
     * @param routeParam
     * @return
     */
    ResponseData saveOrUpdate(AdminRouteParam routeParam);

    /**
     * 开通或者关闭路线信息
     *
     * @param uuid
     * @param status
     * @param businessType
     * @return
     */
    ResponseData<Boolean> updateStatus(String uuid, Integer status, Integer businessType);

    /**
     * 是否删除路线信息
     *
     * @param appid
     * @param uuid
     * @param state
     * @return
     */
    ResponseData<Boolean> updateState(String appid, String uuid, Integer state);

    /**
     * 校验某一坐标是否被某一区域类型起终点范围覆盖
     *
     * @param pasLng
     * @param pasLat
     * @param targetSiteUuid
     * @param originSiteUuid
     * @return
     */
    ResponseData<Map<String, Integer>> pointMatchedByAreaSiteCheck(Double pasLng, Double pasLat, String targetSiteUuid, String originSiteUuid);

    /**
     * 保存跨城小件线路计价
     */
    ResponseData<Boolean> saveParcelRule(AdminWayParcelParam wayParcelParam);

    /**
     * 查询跨城小件线路计价
     */
    ResponseData<SysWayInfoVo> getParcelRule(String uuid);

    /**
     * 跨城线路信息模糊查询
     */
    ResponseData<List<SimpleWayInfo>> fuzzyQueryByName(String wayName);

    /**
     * 获取扫码线路信息
     * @param driverUuid
     * @return
     */
    ResponseData<List<ScanCodeWayInfoVo>> getScanCodeWayInfo(String driverUuid);
}